﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using DIMP_Libraries;
using bomberbide_network;

namespace bomberbode_server
{
    public class gameManager
    {
        #region properties
        private Random maxicul;

        private List<joueur> _Joueurs;
        public List<joueur> Joueurs
        {
            get { return _Joueurs; }
            set { _Joueurs = value; }
        }

        private List<acteur> _Acteurs;
        public List<acteur> Acteurs
        {
            get { return _Acteurs; }
            set { _Acteurs = value; }
        }

        private bomberbide_network.typeCase[,] _map;
        public bomberbide_network.typeCase[,] map
        {
            get { return _map; }
            set { _map = value; }
        }
        #endregion

        private bool Collide(acteur Acteur)
        {
            bool retour = false;
            if ((this.map[(int)((Acteur.Position.X + 10) / 64), (int)((Acteur.Position.Y + 10) / 64)] != typeCase.sol)
                || (this.map[(int)((Acteur.Position.X + 10) / 64), (int)((Acteur.Position.Y + 54) / 64)] != typeCase.sol)
                || (this.map[(int)((Acteur.Position.X + 54) / 64), (int)((Acteur.Position.Y + 10) / 64)] != typeCase.sol)
                || (this.map[(int)((Acteur.Position.X + 54) / 64), (int)((Acteur.Position.Y + 54) / 64)] != typeCase.sol))
                retour = true;

            return retour;
        }

        public void Update(GameTime gameTime)
        {
            foreach (var item in this.Acteurs.Where(b => b.GetType() == typeof(bomber)))
            {
                item.Position.X += item.Vitesse.X;
                item.Position.Y += item.Vitesse.Y;
            }
        }
        #region Constructeurs
        public gameManager()
        {
            this.map = new typeCase[15, 13];
            this.maxicul = new Random();
            this.Acteurs = new List<acteur>();
            this.Joueurs = new List<joueur>();

            #region Génération Map
            // Bords extérieurs
            for (int i = 0; i < 15; i++)
            {
                this.map[i, 0] = typeCase.incassable;
                this.map[i, 12] = typeCase.incassable;
            }
            for (int i = 0; i < 13; i++)
            {
                this.map[0, i] = typeCase.incassable;
                this.map[14, i] = typeCase.incassable;
            }
            // Remplissage random
            for (int i = 1; i < 13; i++)
            {
                for (int j = 1; j < 12; j++)
                {
                    int proc = this.maxicul.Next(1, 100);

                    this.map[i, j] = typeCase.sol;
                    if (proc > 30)
                        this.map[i, j] = typeCase.mur;
                    if (proc > 90)
                        this.map[i, j] = typeCase.grosmur;
                }
            }
            // "poteaux"
            for (int i = 0; i < 6; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    this.map[2 + (i * 2), 2 + j * 2] = typeCase.incassable;
                }
            }
            // Clearage des spawns
            #region clearage des spawns
            this.map[1, 1] = typeCase.sol;
            this.map[2, 1] = typeCase.sol;
            this.map[1, 2] = typeCase.sol;

            this.map[12, 1] = typeCase.sol;
            this.map[13, 1] = typeCase.sol;
            this.map[13, 2] = typeCase.sol;

            this.map[1, 11] = typeCase.sol;
            this.map[2, 11] = typeCase.sol;
            this.map[1, 10] = typeCase.sol;

            this.map[13, 11] = typeCase.sol;
            this.map[12, 11] = typeCase.sol;
            this.map[13, 10] = typeCase.sol;
            #endregion
            #endregion
        }
        #endregion
        #region Events
        public event EventHandler<MessageEventArg> on;
        #endregion
    }
}
